package spese.gestore.androidiani;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Questa classe definisce il database delle List View all'interno all'applicazione
 * @author Fusinato Lorenzo - Androidiani
 *
 */

public class ListViewDb {  

    SQLiteDatabase mDb;
    DbHelper mDbHelper;
    Context mContext;
    private static final String DB_NAME="DbListView";//nome del db
    private static final int DB_VERSION=1; //numero di versione del nostro db
   
    
    /**
     * Quando istanziamo questa classe, istanziamo anche l'helper
     * @param ctx
     */
    public ListViewDb(Context ctx){
            mContext=ctx;
            mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);   //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)    
    }
   
    /**
     * Il database su cui agiamo è leggibile/scrivibile
     */
    public void open(){  //il database su cui agiamo è leggibile/scrivibile
            mDb=mDbHelper.getWritableDatabase();
           
    }
    
    /**
     * Chiudiamo il database su cui agiamo
     */
    public void close(){ //chiudiamo il database su cui agiamo
            mDb.close();
    }
   
   
    //i seguenti 2 metodi servono per la lettura/scrittura del db. aggiungete e modificate a discrezione
   // consiglio:si potrebbe creare una classe Prodotto, i quali oggetti verrebbero passati come parametri dei seguenti metodi, rispettivamente ritornati. Lacio a voi il divertimento

    
    /**
     * Metodo per inserire i dati
     * @param header
     * @param footer
     * @param activity
     */
    public void insertListView(String header,String footer,String activity){ //metodo per inserire i dati
            ContentValues cv=new ContentValues();
            cv.put(ListViewMetaData.LIST_VIEW_HEADER_KEY, header);
            cv.put(ListViewMetaData.LIST_VIEW_FOOTER_KEY, footer);
            cv.put(ListViewMetaData.LIST_VIEW_ACTIVITY_KEY, activity);
            mDb.insert(ListViewMetaData.LIST_VIEW_TABLE, null, cv);
    }
   
    public void setName(String name,int pos) {
    	//this.name = name; 
    	}
    
    /**
     * Metodo per eliminare una riga Missione dalla tabella passando il parametro row(riga)
     * @param row
     * @return
     */
    public boolean delete(String row) {
		
    	return mDb.delete(ListViewMetaData.LIST_VIEW_TABLE, ListViewMetaData.ID + "=" + row, null) > 0;
		
	}
      
    
    /**
     * Metodo per fare la query di tutti i dati
     * @return
     */
    public Cursor fetchListView(){ //metodo per fare la query di tutti i dati
            return mDb.query(ListViewMetaData.LIST_VIEW_TABLE, null,null,null,null,null,null);              
    }

    /**
     * Metodo per fare la query delle list view tramite l'input della activity
     * @param missione
     * @return
     */
    public Cursor fetchListViewByActivity(String activity){ 
    	    String[] act_query={activity};
            return mDb.query(ListViewMetaData.LIST_VIEW_TABLE,null,ListViewMetaData.LIST_VIEW_ACTIVITY_KEY+"=?",act_query,null,null,null);              
    }
    
    
    
    /**
     * I metadati della tabella, accessibili ovunque
     * @author Fusinato Lorenzo - Androidiani
     *
     */
    static class ListViewMetaData {  // i metadati della tabella, accessibili ovunque
            static final String LIST_VIEW_TABLE = "ListView";
            static final String ID = "_id";
            static final String LIST_VIEW_HEADER_KEY = "header";
            static final String LIST_VIEW_FOOTER_KEY = "footer";
            static final String LIST_VIEW_ACTIVITY_KEY = "activity";
    }

    /**
     * Codice sql di creazione della tabella
     */
    private static final String LIST_VIEW_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
                    + ListViewMetaData.LIST_VIEW_TABLE + " ("
                    + ListViewMetaData.ID+ " integer primary key autoincrement, "
                    + ListViewMetaData.LIST_VIEW_HEADER_KEY + " text, "
                    + ListViewMetaData.LIST_VIEW_FOOTER_KEY + " text, "
                    + ListViewMetaData.LIST_VIEW_ACTIVITY_KEY + " text);";

    /**
     * Classe che ci aiuta nella creazione del db
     * @author Fusinato Lorenzo - Androidiani
     *
     */
    private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db

            public DbHelper(Context context, String name, CursorFactory factory,int version) {
                    super(context, name, factory, version);
            }

            @Override
            public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
            	System.out.println("merda");
                    _db.execSQL(LIST_VIEW_TABLE_CREATE);
            }

            @Override
            public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
                    //qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione

            }

    }

	public boolean update(String rowId, String header, 
		    String footer, String activity) {
		
		ContentValues args = new ContentValues();
        args.put(ListViewMetaData.LIST_VIEW_HEADER_KEY, header);
        args.put(ListViewMetaData.LIST_VIEW_FOOTER_KEY, footer);
        args.put(ListViewMetaData.LIST_VIEW_ACTIVITY_KEY, activity);
        return mDb.update(ListViewMetaData.LIST_VIEW_TABLE, args, 
                         ListViewMetaData.ID + "=" + rowId, null) > 0;
		
	}
	

}